package com.framework.service.common;

import com.framework.common.model.response.R;
import com.framework.model.common.vo.TypeVo;

import java.util.List;

/**
 * @author 龘鵺
 * @version 1.0
 * @className com.framework.service.common.TypeService
 * @description 公共类型接口类
 * @datetime 2024-04-20 14:57:12
 */
public interface TypeService {
    /**
     * @param id 编号
     * @return com.framework.model.common.vo.TypeVo
     * @author 龘鵺
     * @title 公共根据编号查询数据
     * @description 公共根据编号查询数据
     * @datetime 2024-04-20 14:57:12
     */
    TypeVo selectByPrimaryKey(Long id);

    /**
     * @param id 1 编号
     * @return com.framework.model.common.vo.TypeVo
     * @title 根据编号查询公共类型
     * @description 根据编号查询公共类型
     * @author 龘鵺
     * @datetime 2024-04-20 14:57:12
     * @version 1.0
     */
    TypeVo getByIdParam(Long id);

    /**
     * @param id             1 编号
     * @param parentTypeCode 2 上级代码
     * @return com.framework.model.common.vo.TypeVo
     * @title 查询公共类型
     * @description 查询公共类型
     * @author 龘鵺
     * @datetime 2025-01-09 11:11:11
     */
    TypeVo getByIdParam(Long id, String parentTypeCode);

    /**
     * @param id             1 编号
     * @param parentTypeCode 2 上级类型代码
     * @return com.framework.common.model.response.R
     * @title 根据编号, 上级类型代码查询信息
     * @description 根据编号, 上级类型代码查询信息
     * @author 龘鵺
     * @datetime 2025-01-09 11:11:11
     */
    R<?> getByIdInfo(Long id, String parentTypeCode);

    /**
     * @param row 1 公共类型类
     * @return com.framework.common.model.response.R
     * @title 新增公共类型
     * @description 新增公共类型
     * @author 龘鵺
     * @datetime 2024-04-20 14:57:12
     * @version 1.0
     */
    R<?> save(TypeVo row);

    /**
     * @param row 1 公共类型类
     * @return com.framework.common.model.response.R
     * @title 编辑公共类型
     * @description 编辑公共类型
     * @author 龘鵺
     * @datetime 2024-04-20 14:57:12
     * @version 1.0
     */
    R<?> edit(TypeVo row);

    /**
     * @param id 1 编号
     * @return com.framework.common.model.response.R
     * @title 删除公共类型
     * @description 删除公共类型
     * @author 龘鵺
     * @datetime 2024-04-20 14:57:12
     * @version 1.0
     */
    R<?> delete(Long id, String parentTypeCode);

    /**
     * @param idList 1 编号集合
     * @return com.framework.common.model.response.R
     * @title 批量删除公共类型
     * @description 批量删除公共类型
     * @author 龘鵺
     * @datetime 2024-04-20 14:57:12
     * @version 1.0
     */
    R<?> batchDeleteList(List<Long> idList, String parentTypeCode);

    /**
     * @param row 1 公共类型类
     * @return java.util.List<com.framework.model.common.vo.TypeVo>
     * @title 查询公共类型集合
     * @description 查询公共类型集合
     * @author 龘鵺
     * @datetime 2024-04-20 14:57:12
     * @version 1.0
     */
    List<TypeVo> findByList(TypeVo row);

    /**
     * @param row  1 公共类型类
     * @param type 2 查询类型，0=上级，  1=下级
     * @return com.framework.common.model.response.R
     * @title 分页查询公共类型列表
     * @description 分页查询公共类型列表
     * @author 龘鵺
     * @datetime 2024-04-20 14:57:12
     * @version 1.0
     */
    R<?> findParamPageList(TypeVo row, int type);

    /**
     * @param parentTypeCode 1 上级类型代码
     * @return com.framework.model.common.vo.TypeVo
     * @title 根据上级类型代码查询信息
     * @description 根据上级类型代码查询信息
     * @author 龘鵺
     * @datetime 2022-01-09 11:11:11
     */
    TypeVo getByParentTypeCodeInfo(String parentTypeCode);

    /**
     * @param parentTypeCode 1 上级类型代码
     * @return java.util.List<com.framework.model.common.vo.TypeVo>
     * @title 根据上级类型代码查询类型
     * @description 根据上级类型代码查询类型
     * @author 龘鵺
     * @datetime 2025-01-09 11:11:11
     */
    List<TypeVo> findByParentCodeList(String parentTypeCode);

    /**
     * @param parentTypeCode 1 上级类型代码
     * @return com.framework.common.model.response.R
     * @title 根据上级类型代码查询类型
     * @description 根据上级类型代码查询类型
     * @author 龘鵺
     * @datetime 2025-01-09 11:11:11
     */
    R<?> findByParentCodeListTwo(String parentTypeCode);

    /**
     * @param id             1 编号
     * @param parentTypeCode 2 上级编码
     * @return com.framework.common.model.response.R
     * @title 启用禁用方法
     * @description 启用禁用方法
     * @author 龘鵺
     * @datetime 2024-06-19 14:54:56
     */
    R<?> enable(Long id, String parentTypeCode);

}